#ifndef IRENDERENTITY_H
#define IRENDERENTITY_H

#include "../include/constantes.h"

class CSpriteAnimation;
class CSprite;
class IDefaultEntityBehaviour;
struct SDL_Surface;

//**************************
//Manage rendering of an entity
//**************************
class IRenderEntity
{
    protected:
        CSprite * m_vEntitySprites;	    //Contains sprites needed by the entity
        CSprite * m_vPowerUpSprite;	    //Contains all sprites needed for powerup
        CSpriteAnimation * m_vShotsAnimations;  //We only take the animations for shots, because, each shots will have its sprite
        SDL_Surface * m_Screen;         //Screen of the application
        SHIP_STATE m_iState;            //State of the entity


    public:
        //**************************
        //Description : Constructor
        //Parameters : None
        //Note : None
        //**************************
        IRenderEntity();

        //**************************
        //Description : Constructor
        //Parameters : The screen
        //Note : None
        //**************************
        IRenderEntity(SDL_Surface * _screen);

        //**************************
        //Description : Copy Constructor
        //Parameters : A IRenderEntity
        //Note : None
        //**************************
        IRenderEntity(IRenderEntity & _RenderEntity);

        //**************************
        //Description : Destructor
        //Parameters : None
        //Note : None
        //**************************
        virtual ~IRenderEntity();

        //**************************
        //Description : Initialise the rendering to its beginning
        //Parameters : None
        //Return Value : None
        //Note : None
        //**************************
        virtual void InitRender() = 0;

        //**************************
        //Description : Set the screen
        //Parameters : The screen
        //Return Value : None
        //Note : None
        //**************************
        void SetScreen(SDL_Surface * _screen);

        //**************************
        //Description : Set sprites for the rendering if it's not done
        //Parameters : The directory toward all sub-directories with files of the animations
        //Return Value : None
        //Note : Virtual because it can change
        //**************************
        virtual void SetSprites(CSpriteAnimation* _EntityAnimations);

        //**************************
        //Description : Render the entity and all things that have connections with it (shots of an entity, power up after death of an enemy, ...)
        //Parameters : None
        //Return Value : None
        //Note : Virtual because rendering depends on the entity
        //**************************
        virtual void Render() = 0;
};
#endif
